package com.szmengran.domain;

import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.lang.annotation.*;

/**
 * Entity, Entity Object is prototype and is not thread-safe
 *
 * @Author Joe
 * @Date 2021/10/11 19:34
 * @Version 1.0
 */

/**
 * inherite：标识性的元注解。标识当前的注解可以由子注解继承
 */
@Inherited
/**
 * retention的作用：注解的生命周期。
 * 只在源码显示的souce、编译期的class、运行时候存在的runtime
 */
@Retention(RetentionPolicy.RUNTIME)
/**
 * target注解的作用：标注注解的作用域。如果有多个作用域用英文逗号进行分割
 * @Target(ElementType.TYPE)——接口、类、枚举、注解
 * @Target(ElementType.FIELD)——字段、枚举的常量
 * @Target(ElementType.METHOD)——方法
 * @Target(ElementType.PARAMETER)——方法参数
 * @Target(ElementType.CONSTRUCTOR) ——构造函数
 * @Target(ElementType.LOCAL_VARIABLE)——局部变量
 * @Target(ElementType.ANNOTATION_TYPE)——注解
 * @Target(ElementType.PACKAGE)——包
 */
@Target({ElementType.TYPE})
@Component
/**
 * Scope注解是springIoc容器中的一个作用域，在 Spring IoC 容器中具有以下几种作用域：
 * 基本作用域singleton（单例）
 * prototype(多例)
 * Web 作用域（reqeust、session、globalsession）
 * 自定义作用域
 */
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public @interface Entity {
}
